package com.season.seasonStudy.javase.j_017_enum0;

public class EnumTestDrive {
	public static void main(String[] args) {
		Apple a1=Apple.金帅;
		Apple a2=Apple.红富士;
		Apple a3=Apple.valueOf("北斗");

		System.out.println(a1.price);
		System.out.println(a1.toString());
		a1.show();
		
		//判断两个枚举的值是否一样
		if (a1==a2) {
			System.out.println("品种一样");
		}
		
		//可以用switch方法判读枚举值
		switch (a1) {
		case 北斗:
			System.out.println("是北斗苹果");
			break;
		case 金帅:
			
			System.out.println("是金帅苹果");
		default:
			break;
		}
		//得到所有枚举值
		Apple[] apples=Apple.values();
		for (Apple apple : apples) {
			System.out.print(apple+"\t");
		}
		
		System.out.println("\n"+a2.compareTo(a1));
		
		String a="10";
		final String b = "20";
		
		String chengji = Grade.B.getChengji();
		System.out.println(chengji);
		
		Grade grade = Grade.B;//static final  可以直接用		
		//所有枚举值都是static final 所以不允许改变枚举值
		
		Grade.valueOf("A");
		Grade gradetest = Grade.valueOf("A");
		System.out.println(Grade.valueOf("A").toString());//在枚举的toString重写过了，打印name
		
		Grade.values();
		for (Grade g : Grade.values()) {
			System.out.println(g);
		}
		for (int i = 0; i < Grade.values().length; i++) {
			System.out.println(Grade.values()[i]);
		}
		
		int index=Grade.C.ordinal();
	}

}



/**
 * 按照国外ABCDE
 * 
 * 枚举类型，是个类型 
 * @author 季节
 * 不能继承，可以当成值类型  可以实现借口
 * 
 */

enum Grade1 {
	A, B, C, D, E;// 理解为固定生成的对象
	// 有限个值组成的类型

	private String chengji;// 可以写方法，构造方法

	// 因为不能new，所以是private

	/*
	 * public Grade() { }
	 */
	private Grade1() {
		// public出错了
	}

	private Grade1(String chengji) {
		this.chengji = chengji;
	}
	/**
	 * 用构造方法写了5个固定对象
	 * 
	 * enum值为英文，是用构造方法写中文=
	 * @author 季节
	 * 
	 */
}

 enum Grade {
	A("优秀",90), B("良好",80), C("中等",70), D("及格",60), E("不及格",0);// 理解为固定生成的对象
	// 有限个值组成的类型

	private String chengji;// 可以写方法，构造方法
	double score;

	// 因为不能new，所以是private

	private Grade() {
		// public出错了
	}

	private Grade(String chengji,double score) {
		this.chengji = chengji;
		this.score = score;
	}

	public String getChengji() {
		return chengji;
	}

	public void setChengji(String chengji) {
		this.chengji = chengji;
	}
	
	public static Grade getGrade(int score){//得有顺序，乱了顺序就不好使了
		Grade[] g = Grade.values();
		for (int i = 0; i < g.length; i++) {
			if (g[i].score<=score) {
				return g[i];
			}
		}
		//这种静态方法是很好用的
		return Grade.E;
 	}
	
}
